package com.aaa.ssm.util;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.auth.CredentialsProvider;
import com.aliyun.oss.common.auth.DefaultCredentialProvider;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;

/**
 * @ fileName:FileHandlerUtil
 * @ description:文件处理工具类（负责文件的上传和下载）
 * @ author:zhz
 * @ createTime:2023/9/23 9:55
 * @ version:1.0.0
 */
public class FileHandlerUtil {
    //定义常量
    //// Endpoint以华东1（杭州）为例，其它Region请按实际情况填写。
    //终端地址
    private static  final String END_POINT = "https://oss-cn-beijing.aliyuncs.com";
    private static  final  String END_POINT_URL = "https://bucket-aaa-qy171-zsf.oss-cn-beijing.aliyuncs.com";
    //bucket名称
    private static  final String BUCKET_NAME = "bucket-aaa-qy171-zsf";
    private static  final String ACCESS_KEY_ID = "LTAI5tM9kQSfGET6UgDtrZdA";
    private static  final String ACCESS_KEY_SECRET = "RfPVlfMCoGZl4cyb5bjenjvmMcv7Kh";
    /**
     * 通用文件上传方法
     * @param file  springmvc提供的多部分文件上传对象
     * @param savePath  保存文件的路径
     * @return
     */
    public static  String uploadFile(MultipartFile file,String savePath){
        InputStream inputStream = null;
        OSS ossClient = null;
        try {
            //通过file获取文件原始名称   c.jpg
            String oldFilename = file.getOriginalFilename();
            //截取原来文件名称后缀
            String oldFilenameSuffix = oldFilename.substring(oldFilename.lastIndexOf("."));
            //使用Java的中的UUID生成名称
            String uuidString = UUID.randomUUID().toString();
            //拼装新文件名称
            String newFileName = uuidString + oldFilenameSuffix;
            //使用file对象还可以获取上传文件的字节输入流
            inputStream = file.getInputStream();

            // 使用代码嵌入的RAM用户的访问密钥配置访问凭证。
            CredentialsProvider credentialsProvider = new DefaultCredentialProvider(ACCESS_KEY_ID, ACCESS_KEY_SECRET);
            // 从环境变量中获取访问凭证。运行本代码示例之前，请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
           /* EnvironmentVariableCredentialsProvider credentialsProvider =
                    CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();*/
            // 填写Bucket名称，例如examplebucket。
            // String bucketName = "examplebucket";
            // 填写Object完整路径，完整路径中不能包含Bucket名称，例如exampledir/exampleobject.txt。
            //String objectName = "exampledir/exampleobject.txt";
            //自己传递的savePath = user/images/    newFileName = 624d9974-4f0e-47c2-82dc-fc56e8580c8e.jpg
            //objectName = user/images/624d9974-4f0e-47c2-82dc-fc56e8580c8e.jpg
            String objectName = savePath+newFileName;
            // 填写本地文件的完整路径，例如D:\\localpath\\examplefile.txt。
            // 如果未指定本地路径，则默认从示例程序所属项目对应本地路径中上传文件流。
            //String filePath= "D:\\localpath\\examplefile.txt";
            // 创建OSSClient实例。
            ossClient = new OSSClientBuilder().build(END_POINT, credentialsProvider);
            //InputStream inputStream = new FileInputStream(filePath);
            // 创建PutObjectRequest对象。
            PutObjectRequest putObjectRequest = new PutObjectRequest(BUCKET_NAME, objectName, inputStream);
            // 创建PutObject请求。 上传成功
            PutObjectResult result = ossClient.putObject(putObjectRequest);
            //返回文件路径
            // https://bucket-aaa-qy171-wangzhe.oss-cn-beijing.aliyuncs.com/user/images/624d9974-4f0e-47c2-82dc-fc56e8580c8e.jpg
            return  END_POINT_URL+"/"+objectName;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
                if(inputStream!=null){
                    inputStream.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
    public static void main(String[] args) {
           /* //通过file获取文件原始名称   c.jpg
            String oldFilename = "aa.bb.cc.jpg";
            //截取原来文件名称后缀
            String oldFilenameSuffix = oldFilename.substring(oldFilename.lastIndexOf("."));
            //使用Java的中的UUID生成名称
            String uuidString = UUID.randomUUID().toString();
            //拼装新文件名称
            String newFileName = uuidString + oldFilenameSuffix;
            System.out.println(newFileName);*/
        System.out.println("accessKeySecret".toUpperCase());
    }
    /**
     * 通用下载方法
     * @param filePath   https://qy149bucket.oss-cn-beijing.aliyuncs.com/a/b/c/b57fb665-5619-4aea-8ea9-2da72bbf78df.png
     * @param response   响应对象
     */
}
